package com.fwj.common.annotation;

import com.fwj.core.common.common.FileType;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.lang.annotation.*;

/**
 * @Author: fwj
 * @Data: 2022/4/15 15:38
 * @Version 1.0
 * @Description:    文件校验
 */

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.PARAMETER})
public @interface Files {
    /**
     * 文件类型限制
     */
    FileType[] fileTypes() default {};

    boolean isLimit() default false;

    boolean isWhile() default true;

    /**
     * 文件大小限制，小于 0 表示不作限制；单位：千字节（KB）
     */
    long maxSize() default -1L;


    @Component
    @Aspect
    class MultipartFilesValidator{

        @Pointcut(value = "@annotation(com.fwj.common.annotation.Files)")
        private void pointCut(){

        }


        @Before("pointCut() && @annotation(files)")
        public void before(JoinPoint joinPoint, Files files) {
            try {
                Object[] args = joinPoint.getArgs();
                MultipartFile[] multipartFiles = (MultipartFile[]) args[0];
                boolean res = isNotNULL(multipartFiles) && true;
            } catch (Exception e){

            }
        }

        private boolean isNotNULL(MultipartFile[] files) {
            if(null != files && !files[0].isEmpty()){
                return true;
            }
            return false;
        }

    }
}
